<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
</head>
<body>
<!--这里是样式-->
</body>
</html>
<script>
// 构造函数就是一个普通的函数，但具有自己的特征和用法。

var Vehicle = function () { 
  this.price = 1000;
};
var  v=new Vehicle();
v.price//1000
// 上面代码中，Vehicle就是构造函数。为了与普通函数区别，构造函数名字的第一个字母通常大写。

// 构造函数的特点有两个。

// 函数体内部使用了this关键字，代表了所要生成的对象实例。
// 生成对象的时候，必须使用new命令。
var Vehicle = function (p) {
  this.price = p;
};

var v = new Vehicle(500);//可以接受参数的

console.log(v.price);
// 防止报错可以使用严格模式
function Fubar(foo, bar){
  'use strict';
  this._foo = foo;
  this._bar = bar;
}

Fubar()
// TypeError: Cannot set property '_foo' of undefined
// new 命令的原理
// 使用new命令时，它后面的函数依次执行下面的步骤。

// 创建一个空对象，作为将要返回的对象实例。
// 将这个空对象的原型，指向构造函数的prototype属性。
// 将这个空对象赋值给函数内部的this关键字。
// 开始执行构造函数内部的代码。
</script>